<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>iterator</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">   
	<style type="text/css">
		.odd{background-color:red;}
		.even{background-color:blue;}
	</style> 
  </head>
  
  <body>
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>index</th>
  				<th>pid</th>
  				<th>name</th>
  				<th>当前迭代的元素个数</th>
  				<th>是否是第一个元素</th>
  				<th>是否是最后一个元素</th>
  				<th>是否是奇数位</th>
  				<th>是否是偶数位</th>
  			</tr>
  			<!--不使用迭代标签输出集合中的内容
  			<tr>
				<td><s:property value="#personList[0].pid"/></td>
				<td><s:property value="#personList[0].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personList[1].pid"/></td>
				<td><s:property value="#personList[1].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personList[2].pid"/></td>
				<td><s:property value="#personList[2].name"/></td>
  			</tr>
  			
  			<tr>
				<td><s:property value="#personMap['person1'].pid"/></td>
				<td><s:property value="#personMap['person1'].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personMap['person2'].pid"/></td>
				<td><s:property value="#personMap['person2'].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personMap['person3'].pid"/></td>
				<td><s:property value="#personMap['person3'].name"/></td>
  			</tr>
  			-->
  				
  			<!-- 使用迭代标签输出集合中的数据 -->
  			<!-- 
  				s:iterator标签：迭代标签——迭代输出集合(collection：list或set)、数组的元素
  					属性：
  						value	指向valueStack中要遍历的集合
  						var		当前正在遍历的对象，该对象存在于map栈中		
  						status	InteratorStatus对象，对正在遍历的当前索引行进行描述：当前索引到第几行、遍历过的行数、是否是第一行、是否是最后一行、是否是奇数行、是否是偶数行
  				说明：当前正在迭代的元素位于内存栈的栈顶,可通过debug标签查看
  					如果value值不写，则默认迭代栈顶元素
  			 -->
  			<s:iterator value="#personList" var="person" status="st">
  				<tr class="<s:property value="#st.even?'even':'odd'"/>">
  					<td><s:property value="#st.index" /></td>
  					<td><s:property value="#person.pid" /></td>
  					<td><s:property value="#person.name" /></td>
  					<td><s:property value="#st.count" /></td>
  					<td><s:property value="#st.first" /></td>
  					<td><s:property value="#st.last" /></td>
  					<td><s:property value="#st.odd" /></td>
  					<td><s:property value="#st.even" /></td>
  				</tr>
  			</s:iterator>
  		</tbody>
  	</table>
  	
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>pid</th>
  				<th>name</th>
  			</tr>
  			<!--不使用迭代标签输出map集合中的内容
  			<tr>
				<td><s:property value="#personMap['person1'].pid"/></td>
				<td><s:property value="#personMap['person1'].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personMap['person2'].pid"/></td>
				<td><s:property value="#personMap['person2'].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personMap['person3'].pid"/></td>
				<td><s:property value="#personMap['person3'].name"/></td>
  			</tr>
  			-->
  				
  			<!-- 使用迭代标签输出map集合:Map<String, Person>中的数据 -->
  			<!-- 
  				s:iterator标签：迭代标签——迭代输出map集合的元素
  				属性：
  					value：当前正在迭代的元素是entry类型，且在栈顶
  			 -->
  			<s:iterator value="#personMap">
  				<tr>	
<%--  					<s:debug></s:debug>--%>
					<td><s:property value="value.pid"/></td>
					<td><s:property value="value.name"/></td>
				</tr>
  			</s:iterator>
  		</tbody>
  	</table>
  	
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>pid</th>
  				<th>name</th>
  			</tr>
  			<!--不使用迭代标签输出对象数组中的内容
  			<tr>
				<td><s:property value="#personArray[0].pid"/></td>
				<td><s:property value="#personArray[0].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personArray[1].pid"/></td>
				<td><s:property value="#personArray[1].name"/></td>
  			</tr>
  			<tr>
				<td><s:property value="#personArray[2].pid"/></td>
				<td><s:property value="#personArray[2].name"/></td>
  			</tr>
  			-->
  				
  			<!-- 使用迭代标签输出map集合:Map<String, Person>中的数据 -->
  			<!-- 
  				s:iterator标签：迭代标签——迭代输出对象数组的元素
  			 -->
  			<s:iterator value="#personArray">
  				<tr>	
<%--  					<s:debug></s:debug>--%>
					<td><s:property value="pid"/></td>
					<td><s:property value="name"/></td>
				</tr>
  			</s:iterator>
  		</tbody>
  	</table>
  	
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>pid</th>
  				<th>name</th>
  			</tr>
  			<!-- 使用迭代标签输出set集合:Set<Person> set = new HashSet<Person>()中的数据 -->
  			<!-- 
  				s:iterator标签：迭代标签——迭代输出set集合中的元素
  			 -->
  			<s:iterator value="#personSet">
  				<tr>	
<%--  					<s:debug></s:debug>--%>
					<td><s:property value="pid"/></td>
					<td><s:property value="name"/></td>
				</tr>
  			</s:iterator>
  		</tbody>
  	</table>
  	
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>pid</th>
  				<th>name</th>
  			</tr>
  			<!-- 使用迭代标签输出list集合:List<Map<String, Person>> list = new ArrayList<Map<String,Person>>()中的数据 -->
  			<!-- 
  				s:iterator标签：迭代标签——迭代输出List<Map<String, Person>>集合中的元素
  			 -->
  			<s:iterator value="#personList">
  				<!-- 因为当前正在迭代的元素是map，map在栈顶,所以value属性不需要加 -->
  				<s:iterator>
<%--	  					<s:debug></s:debug>--%>
	  				<tr>	
	  					<td><s:property value="value.pid"/></td>
						<td><s:property value="value.name"/></td>
					</tr>
  				</s:iterator>
  			</s:iterator>
  		</tbody>
  	</table>
  	
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>pid</th>
  				<th>name</th>
  			</tr>
  			<!-- 使用迭代标签输出map集合:Map<String, List<Person>> map = new HashMap<String, List<Person>>()中的数据 -->
  			<!-- 
  				s:iterator标签：迭代标签——迭代输出Map<String, List<Person>> map = new HashMap<String, List<Person>>()集合中的元素
  			 -->
  			<s:iterator value="#personMap">
  				<s:iterator value="value">
<%--	  					<s:debug></s:debug>--%>
	  				<tr>	
	  					<td><s:property value="pid"/></td>
						<td><s:property value="name"/></td>
					</tr>
  				</s:iterator>
  			</s:iterator>
  		</tbody>
  	</table>
  	
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>pid</th>
  				<th>name</th>
  			</tr>
  			<!-- 使用迭代标签输出List集合:List<Map<String, List<Person>>> list2 = new ArrayList<Map<String,List<Person>>>() -->
  			<!-- 
  				s:iterator标签：迭代标签——迭代输出List<Map<String, List<Person>>> list2 = new ArrayList<Map<String,List<Person>>>()集合中的元素
  			 -->
  			<s:iterator value="#personList">
  				<s:iterator>
  					<s:iterator  value="value">
<%--	  					<s:debug></s:debug>--%>
		  				<tr>	
		  					<td><s:property value="pid"/></td>
							<td><s:property value="name"/></td>
						</tr>
  					</s:iterator>
  				</s:iterator>
  			</s:iterator>
  		</tbody>
  	</table>
  	
  	<!-- 其他标签 -->
  	<table id="userTable" border="1" cellpadding="5" cellspacing="0">
  		<tbody>
  			<tr>
  				<th>index</th>
  				<th>pid</th>
  				<th>name</th>
  				<th>当前迭代的元素个数</th>
  				<th>是否是第一个元素</th>
  				<th>是否是最后一个元素</th>
  				<th>是否是奇数位</th>
  				<th>是否是偶数位</th>
  			</tr>
		<s:iterator value="#personList" var="person" status="st">
			<s:if test="#person.pid == 1 ">
				<tr class="odd">
					<td><s:property value="#st.index" /></td>
					<td><s:property value="#person.pid" /></td>
					<td><s:property value="#person.name" /></td>
					<td><s:property value="#st.count" /></td>
					<td><s:property value="#st.first" /></td>
					<td><s:property value="#st.last" /></td>
					<td><s:property value="#st.odd" /></td>
					<td><s:property value="#st.even" /></td>
				</tr>
			</s:if>
			<s:elseif test="#person.pid == 2">
				<tr class="even">
					<td><s:property value="#st.index" /></td>
					<td><s:property value="#person.pid" /></td>
					<td><s:property value="#person.name" /></td>
					<td><s:property value="#st.count" /></td>
					<td><s:property value="#st.first" /></td>
					<td><s:property value="#st.last" /></td>
					<td><s:property value="#st.odd" /></td>
					<td><s:property value="#st.even" /></td>
				</tr>
			</s:elseif>
			<s:else>
				<tr>
					<td><s:property value="#st.index" /></td>
					<td><s:property value="#person.pid" /></td>
					<td><s:property value="#person.name" /></td>
					<td><s:property value="#st.count" /></td>
					<td><s:property value="#st.first" /></td>
					<td><s:property value="#st.last" /></td>
					<td><s:property value="#st.odd" /></td>
					<td><s:property value="#st.even" /></td>
				</tr>
			</s:else>
		</s:iterator>
  		</tbody>
  	</table>
  	
  </body>
</html>
